Floating Point Basic

floating point浮點數

在過去的觀念裡面 浮點數就是用來表達小數
但事實上如果只是這樣的概念的話 其實會有一些危險

其實在設計浮點數之前 有另外一種表達小數的方法
叫做定點數
* 定點數它的小數點是不能移動的
* 浮點數它的小數點是可以移動的

過去介紹的表示法

實際上它能夠表達的數字範圍也是有一定的極限
同學們可以想想看如果我們想要表達的數字是非常非常大的一個數字
或是是非常非常小 非常趨近於0的一個小數
甚至是所謂的有理數 無理數 或是一些自然的常數
透過我們之前介紹的這些representation 其實並不是非常的合適

十進位科學記號表示法

無論如何 我們在小數點前面 一定最多只有一個位數
而且這個位數絕對不會是0

符合科學記號表示法 -> normalized

二進位科學記號表示法

floating point

小數點前面是一個1
只要符合這個規則的 我們就會說它是normalized的floating point

常用的floating point representation有兩個

第一個是用32個bits去表達它
我們把它稱之為single-precision的floating point representation

而第二種是用64個bits去represent
我們把它叫做double precision的floating point representation

也就是俗稱的單精度以及雙精度的representation

single precision

前提: normalized過的floating point

同學們可以注意到一件事情 就是我們Fraction前面的這個1不見了
因為我們都知道在normalized過的floating point裡面
實際上小數點前面一定就是唯一一位 而且這一位絕對只會是1

也就是說透過這個過程 我們額外的偷到了1個bit
因為我們節省了1個bit

double precision

double precision它可以表達的數字範圍好大
遠比single precision大很多
但其實真正最關鍵最重要的事情是 

它的精準度
會比single precision它的精準度 精準非常多

而這一點經常的被大家所忽略 會覺得好像只是數字範圍的表達不同而已
其實並不是只有如此 最關鍵的事情是它能夠表達的精準的位數
也就是小數點底下第幾位都還是準的 這件事情是遠比single precision來的好很多

IEEE 754

產業界針對浮點數有制定一個表達的標準 這個標準就是IEEE 754的標準

講到這裡 其實有一個地方會出問題

如果我要表達的數字的是0呢

我們縱然偷到了1個bit 也就是我們讓我們的精準度能多1個bit
但是我們卻沒有辦法表達0了

因為我們所有的數字前面都有1個hidden 1要加上來

解決

在浮點數的設計裡面 我們依據了IEEE 754的設計
它決定把一個exponent的值保留起來 當我們看到了一個特定的一個exponent的值的時候
就代表這個浮點數它就是0
後面會詳談

exponent

exponent它要表達的是2的冪次方
有可能是正的冪次方 也有可能是負的冪次方
因此我們需要同時能夠表達正的數字以及負的數字

希望硬體能夠重複的被使用

如果我們想要去比較兩個浮點數的數字

我們會希望我們可不可以應用之前
我們在ALU所設計的整數的比大小 就可以同時的去完成浮點數的比大小

整數我們要去比較兩個數字大小的時候
其實我們可以透過set on less than
slt這個指令去完成

因此我們其實很希望 我們可以就直接運用ALU裡面的slt這樣子的一個data path
就能夠同時的去比較浮點數的大小

舉例:

若直接全部用slt來比較
一定2/1>2
不符合預期

biased notation (excess M)

這個M它是一個常數
實際上這邊有一個例子
這叫做biased 7 也就是excess 7
意思是說 在我們原本的representation裡面 我們表達的數字要把它再扣掉了7

在這個representation裡面 大家有沒有注意到一個很重要的一個特性

就是只要你要表達的數字是比較大的 例如說是8
那麼顯然的它一定會比其他比它小的數字 在正常的representation來看的時候
它都來的比較大 而這個特性我們剛剛好可以拿來運用

2確實>2/1

透過這樣子的設計 只要我們採用了biased或是excess這樣的一個representation
去表達我們的exponent的話 我們可以實際上得到一個非常大的好處
這個好處就是當我們要比較浮點數大小的時候 我們其實用整數的方法就可以比較出它的大小

總結

results matching ""

    No results matching ""